home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 November / EnigmA AMIGA RUN 02 (1995)(G.R. Edizioni)(IT)[!][issue 1995-11][Skylink CD].iso / earcd / program / amos / amcafext.lha / AMCAF_Examples / VecRotWire.AMOS / VecRotWire.amosSourceCode
AMOS Source Code  |  1995-07-14  |  3KB  |  110 lines

  1. ' ************************************* Commands used: 
  2. ' *                                   * Vec Rot Pos        Turbo Draw
  3. ' *           Amcaf Examples          * Vec Rot Angles     Blitter Clear 
  4. ' *   Vector Rotate Wireframe V1.1    * Vec Rot Precalc    =Qsin 
  5. ' *      Written by Chris Hodges      * =Vec Rot X 
  6. ' *                                   * =Vec Rot Y 
  7. ' ************************************* =Vec Rot Z 
  8. '                          
  9. ' Remove mouse.
  10. Hide 
  11. ' Setup a nice little 2 colours screen with double buffering.  
  12. Screen Open 0,320,256,2,Lowres
  13. Curs Off : Flash Off : Paper 0 : Pen 1 : Cls 
  14. Palette 0,$FFF
  15. Double Buffer 
  16. Autoback 0
  17. ' Read out, how many coords are used.
  18. Restore COORDS
  19. Read NUMCO
  20. ' Dim one field to keep these coords, and a second for the rotated.
  21. Dim CO(NUMCO,2),RC(NUMCO,1)
  22. ' Now read all coords in.
  23. For A=1 To NUMCO
  24.   Read CO(A,0),CO(A,1),CO(A,2)
  25. Next 
  26. ' Then, get the number of lines the object consists of.
  27. Restore LINES
  28. Read NUMLI
  29. ' Dim a field to hold the startcoord and the endcoord. 
  30. Dim LI(NUMLI,1)
  31. ' Get the datas. 
  32. For A=1 To NUMLI
  33.   Read LI(A,0),LI(A,1)
  34. Next 
  35. ' Set the three angles. Remember that these are non standard angles, 
  36. ' one full rotation is at 1024, not 360! 
  37. AX=0 : AY=512 : AZ=128
  38. Repeat 
  39.   ' Clear the screen.
  40.    Extension_8_121C 0,0
  41.   ' While the blitter is working, use the time to calculate the rotations. 
  42.   ' Move and set the angles. 
  43.   Add AX,10
  44.   Add AY,16
  45.   Add AZ,19
  46.    Extension_8_1138 AX,AY,AZ
  47.   ' Calculate the distances by using a sine-function and the three angles. 
  48.   POSX= Extension_8_1106(AX,300)
  49.   POSY= Extension_8_1106(AY,300)
  50.   POSZ= Extension_8_1106(AZ,500)+1500
  51.   ' Set the camera positions.
  52.    Extension_8_1122 POSX,POSY,POSZ
  53.   ' Now it's time to compute the matrix. 
  54.    Extension_8_1152 
  55.   ' So let's rotate all coordinates of the field CO()
  56.   For A=1 To NUMCO
  57.     ' Note: You only have to use the vec rot function with parameters once.
  58.     RC(A,0)= Extension_8_1168(CO(A,0),CO(A,1),CO(A,2))+160
  59.     RC(A,1)= Extension_8_1184 +128
  60.   Next 
  61.   ' It's time to finally get the lines to the screen!
  62.   For A=1 To NUMLI
  63.     ' Starting coordinates pair. 
  64.     C1=LI(A,0)
  65.     ' Ending coordinates pair. 
  66.     C2=LI(A,1)
  67.     ' Get the rotated coordinates
  68.     X1=RC(C1,0) : Y1=RC(C1,1)
  69.     X2=RC(C2,0) : Y2=RC(C2,1)
  70.      Extension_8_1016 X1,Y1 To X2,Y2,1
  71.   Next 
  72.   ' Swap the screens to bring the object to view.
  73.   Screen Swap 
  74.   Wait Vbl 
  75. Until Inkey$=Chr$(27) or Mouse Key<>0
  76. Screen Close 0
  77. End 
  78. '  1_____2   
  79. ' 5/____/| 
  80. ' | |  |6| 
  81. ' |4|__|_|3  
  82. ' |/___|/
  83. ' 8    7 
  84. COORDS:
  85.   Data 8
  86. ' CUBE 
  87.   Data -100,-100,-100
  88.   Data 100,-100,-100
  89.   Data 100,-100,100
  90.   Data -100,-100,100
  91.   Data -100,100,-100
  92.   Data 100,100,-100
  93.   Data 100,100,100
  94.   Data -100,100,100
  95.  
  96. LINES:
  97.   Data 12
  98. ' CUBE 
  99.   Data 1,2
  100.   Data 2,3
  101.   Data 3,4
  102.   Data 4,1
  103.   Data 5,6
  104.   Data 6,7
  105.   Data 7,8
  106.   Data 8,5
  107.   Data 1,5
  108.   Data 2,6
  109.   Data 3,7
  110.   Data 4,8